/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package API_Db;

import domain.Utilisateur;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Damador
 */
public class API_Db_Utilisateur implements IAPI_Db_Utilisateur {

    //ConnexionDB connect;
    @Override
    public int inscrireDB(Utilisateur user) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");

        String requeteInsertion = "INSERT INTO utilisateur "
                + "(id_utilisateur, nom, prenom, sexe, date_naissance, rue, ville, code_postal,"
                + "telephone, login, mot_de_passe, email, date_derniere_connexion, actif) VALUES"
                + "( NULL, '" + user.getNom() + "','" + user.getPrenom() + "','" + user.getSexe() + "',"
                + "'" + dateFormat.format(user.getDateNaissance()) + "','" + user.getRue() + "','" + user.getVille() + "',"
                + "'" + user.getCodePostal() + "','" + user.getTelephone() + "','" + user.getLogin() + "',"
                + "MD5('" + user.getMotDePasse() + "'),'" + user.getEmail() + "',NULL,"
                + "0);";
        System.out.println(requeteInsertion);
        try {
            return ConnexionDB.getConnexion().executerRequeteUpdate(requeteInsertion);
        } catch (Exception ex) {
            return -1;
        }
    }

    @Override
    public Utilisateur identifierDB(String login, String mdp) {
        ResultSet res;
        String requeteSelectUtilisateur = "Select * FROM utilisateur WHERE login = \""
                + login + "\" AND mot_de_passe = MD5('" + mdp + "');";
        System.out.println(requeteSelectUtilisateur);
        try {
            res = ConnexionDB.getConnexion().executerRequeteQuery(requeteSelectUtilisateur);
            Utilisateur user = null;
            while (res.next()) {
                user = getUtilisateurParId(res.getInt("id_utilisateur"));
            }
            return user;
        } catch (Exception ex) {
            return null;
        }
    }

    @Override
    public int activerUtilisateurDB(int id_utilisateur) {
        String requeteUpdateUtilisateur = "UPDATE utilisateur SET actif = 1 WHERE id_utilisateur = "+id_utilisateur;
        try {
            if(ConnexionDB.getConnexion().executerRequeteUpdate(requeteUpdateUtilisateur) == 0)
            {
                return -2;
            }
            return 1;
        } catch (Exception ex) {
            return -2;
        }
    }

    @Override
    public int modifierProfilDB(Utilisateur user) {
        
        //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");

        String requeteUpdateProfil = "UPDATE utilisateur set nom='" + user.getNom() + "',prenom='" + user.getPrenom() + "',sexe='"+user.getSexe()+"',"
                + "rue='" + user.getRue() + "',ville='" + user.getVille() + "',"
                + "code_postal='" + user.getCodePostal() + "',telephone='" + user.getTelephone() + "',login='" + user.getLogin() + "',"
                + "mot_de_passe=MD5('" + user.getMotDePasse() + "'),email='" + user.getEmail() + "',actif="
                + user.isActif() +" WHERE id_utilisateur = "+user.getIdUtilisateur();
        System.out.println(requeteUpdateProfil);
        try {
            return ConnexionDB.getConnexion().executerRequeteUpdate(requeteUpdateProfil);
        } catch (Exception ex) {
            return -1;
        }
    }

    @Override
    public Utilisateur getUtilisateurParId(int id_utilisateur) {
        ResultSet res;
        String requeteGetUtilisateur = "Select * FROM utilisateur WHERE id_utilisateur = " + id_utilisateur;
        try {
            res = ConnexionDB.getConnexion().executerRequeteQuery(requeteGetUtilisateur);
            Utilisateur user = null;
            while (res.next()) {
                user = new Utilisateur();
                user.setIdUtilisateur(res.getInt("id_utilisateur"));
                user.setNom(res.getString("nom"));
                user.setPrenom(res.getString("prenom"));
                user.setSexe(res.getString("sexe").charAt(0));
                user.setRue(res.getString("rue"));
                user.setVille(res.getString("ville"));
                user.setCodePostal(res.getString("code_postal"));
                user.setTelephone(res.getString("telephone"));
                user.setLogin(res.getString("login"));
                user.setMotDePasse(res.getString("mot_de_passe"));
                user.setEmail(res.getString("email"));
                user.setDateDerniereConnexion(res.getDate("date_derniere_connexion"));
                user.setActif(res.getBoolean("actif"));
            }
            return user;
        } catch (Exception ex) {
            return null;
        }
    }

    @Override
    public int deconnecterDB() {
        try {    
            return ConnexionDB.getConnexion().Deconnection();
        } catch (Exception ex) {
            return -3;
        }
    }

    @Override
    public int recupererMotDePass(String mail) {
        ResultSet res;
        String requeteSelectMDP = "Select mot_de_passe FROM utilisateur WHERE email = \""
                + mail + "\";";
        System.out.println(requeteSelectMDP);
        try {
            res = ConnexionDB.getConnexion().executerRequeteQuery(requeteSelectMDP);
            while (res.next()) {
                System.out.println(res.getString("mot_de_passe"));
                return 1;
            }
            return 1;
        } catch (Exception ex) {
            return -4;
        } 
    }

    @Override
    public int changeEtatUtilisateurDB(int id_utilisateur, int etat) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int creerCompteDB(int idUtilisateur) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
